package com.tea.admin.modules.app.controller;

import com.tea.admin.common.annotation.Permission;
import com.tea.common.common.config.property.IOProperty;
import com.tea.common.common.exception.ServiceException;
import com.tea.common.result.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 文件上传控制器
 */
@RestController
@RequestMapping("/api/app/upload")
public class UploadController {

    @Autowired
    private IOProperty ioProperty;
    
    @Value("${server.port}")
    private String serverPort;

    /**
     * 上传图片接口
     * @param file 图片文件
     * @param request HTTP请求
     * @return 图片URL
     */
    @PostMapping("/image")
    @Permission("system:app:upload")
    public CommonResult<String> uploadImage(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        if (file.isEmpty()) {
            return CommonResult.failed("上传失败，请选择文件");
        }

        try {
            // 确保目录存在
            File dir = new File(ioProperty.getImageFileRootPath());
            if (!dir.exists()) {
                dir.mkdirs();
            }

            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            // 文件后缀
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // 生成新的文件名 - 不再使用carousel前缀，保持与商品图片命名一致
            String dateDir = new SimpleDateFormat("yyyyMMdd").format(new Date());
            String newFileName = "image-" + UUID.randomUUID().toString().replaceAll("-", "") + suffix;
            
            // 创建日期目录
            File dateDirectory = new File(dir, dateDir);
            if (!dateDirectory.exists()) {
                dateDirectory.mkdirs();
            }
            
            // 文件保存路径
            File destFile = new File(dateDirectory, newFileName);
            
            // 检查文件大小限制 (5MB)
            if (file.getSize() > 5 * 1024 * 1024) {
                return CommonResult.failed("文件大小不能超过5MB");
            }
            
            // 保存文件
            file.transferTo(destFile);
            
            // 只返回相对路径，而不是完整URL
            String imagePath = dateDir + "/" + newFileName;
            return CommonResult.success(imagePath, "上传成功");
            
        } catch (IOException e) {
            e.printStackTrace();
            return CommonResult.failed("上传失败: " + e.getMessage());
        }
    }
    
    /**
     * 获取服务器基础URL
     * @param request HTTP请求
     * @return 基础URL，如：http://localhost:9101
     */
    private String getBaseUrl(HttpServletRequest request) {
        String scheme = request.getScheme();
        String serverName = request.getServerName();
        return scheme + "://" + serverName + ":" + serverPort;
    }
} 